package com.topwalk.step01;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 自定义Callable
 * 
 * @author tang
 */
@Slf4j
class Demo2_3Callable implements Callable<Integer> {
    
    @Override
    public Integer call() throws Exception {
        // 模拟计算需要一秒
        log.debug("进入call");
        Thread.sleep(1000);
        log.debug("完成call");
        return 2;
    }
    
    public static void main(String[] args) throws Exception {
        // 使用
        ExecutorService executor = Executors.newCachedThreadPool();
        Demo2_3Callable callable = new Demo2_3Callable();
        Future<Integer> result = executor.submit(callable);
        // 注意调用get方法会阻塞当前线程，直到得到结果。
        // 所以实际编码中建议使用可以设置超时时间的重载get方法。
        log.info("{}", result.get()); 
    }
    
}